iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 2
0
自我挑戰組

前端工程師的30份套餐系列 第 2

Day2-var 與let、const

  • 分享至 

  • xImage
  •  

最近在寫React時發現很多時候變數明明被改變了,卻要用const來宣告而不是用let,究竟原因是什麼呢?今日的套餐讓我們來嚐嚐ES5的var與E6的let、conset的差別吧!

簡單來說ES6宣告變數上比較嚴格,新增了塊級作用域,將全域作用域棄用:
https://ithelp.ithome.com.tw/upload/images/20181017/20112494cAZ938z1rP.png

全域作用域:
1.削弱了程式的彈性,盡量避免使用
2.只能做簡單的事情,複雜的事情會事倍功半

塊級作用域:
1.用大括號{}的情況下成立,沒有的話會報錯
2.外層無法讀取內層作用域的變數

ES5變數var
1.全域作用域
2.存在變數提升的現象,也就是在宣告之前可以使用,但值為undefined

console.log(delicious)  //undefined
var delicious = 'eat'

3.缺點:以下的範例中,變數i是透過var宣告,在全域範圍內都有效,所以每次的循環,新的值i都會覆蓋掉舊值

for (var i = 0; i < 5; ++i) {
  setTimeout(function () {
    console.log(i);  // 輸出 '5' 五次
  }, 100);  
}

ES6的 let 與 const
都有個共通特性是
1.不可重複宣告
2.作用域只在宣告的塊級作用域內有效
3.不存在變數提升,只能在宣告之後使用
若在定義變數之前使用該變數則會拋出ReferenceError錯誤

p = 3;  // ReferenceError
let p; 

let變數:
1.需要再指定值的情況。
2.用於for迴圈

for (let i = 0; i < 5; ++i) {
  setTimeout(function () {
    console.log(i); // 輸出 0, 1, 2, 3, 4
  }, 100);  
}

const常數:
1.宣告時就立即給予值,不可之後再改變值(修改會報錯)。

實際上並不是變數的值不能改變,而是變數指向的內存位址不能被改變

const a = [];
a.push('Java');    // 可執行,此时a為['Java']
a = ['script'];    // error

以上是今天的餐點內容,如有錯誤還望各位包含與提出更正,在此先感謝一鞠躬/images/emoticon/emoticon29.gif


上一篇
Day1-前菜
下一篇
Day3-JavaScript 函式(function)
系列文
前端工程師的30份套餐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言